using System;
using LibreriaCommon; 
using LibreriaDS; 
using LibreriaData; 

namespace LibreriaBusiness
{
    /// <summary>
    /// Clase base para manejo de Roles. 
    /// </summary>
    public abstract class boRolBase : boBase, IDisposable
    { 
		private daRol rol;
		
		/// <summary>
		/// Constructor.
		/// </summary>
        /// <param name="securityInfo">Referencia a un objeto SecurityInfo.</param>
        public boRolBase(SecurityInfo securityInfo) : base(securityInfo)
		{
			rol = new daRol(securityInfo);
		}
		
		#region Dispose
		private bool disposed = false;

        public void Dispose()
		{
			Dispose(true);
			GC.SuppressFinalize(this);
		}

		protected void Dispose(bool disposing)
		{
			if (!this.disposed)
			{
				if (disposing)
				{
					rol.Dispose();
				}

				//liberar recursos no manejados
			}

			disposed = true;         
		}

		~boRolBase()
		{
			Dispose(false);
		}
		#endregion Dispose

        /// <summary>
        /// Buscar un Rol por id.
        /// </summary>
        /// <param name="id">Id. del Rol.</param>
        /// <returns>dsRol</returns>
        public virtual dsRol Find(int id) 
        { 
            try 
            { 
                return rol.FindByPrimaryKey(id); 
            } 
            catch (Exception ex) 
            { 
                throw new boException(ex);
            } 
        }
        /// <summary>
        /// Buscar Rol por Nombre.
        /// </summary>
        /// <param name="nombre">Nombre unico del Rol, independientemente si esta activo o no</param>
        /// <returns>dsRol</returns>
        public virtual dsRol Find(string nombre)
        {
            try
            {
                return rol.FindByNombre(nombre);
            }
            catch (Exception ex)
            {
                throw new boException(ex);
            }
        }

        /// <summary>
        /// Buscar Roles por estado.
        /// </summary>
        /// <param name="estado">Estado (Inactivo, Activo, Todos)</param>
        /// <returns>dsRol</returns>
        public virtual dsRol FindByEstado(LibreriaCommon.Constants.EstadosEnum estado) 
        { 
            try 
            { 
                if (estado == Constants.EstadosEnum.Todos) 
                { 
                    return rol.FindByEstado(System.DBNull.Value); 
                } 
                else 
                { 
                    return rol.FindByEstado(estado); 
                } 
            } 
            catch (Exception ex) 
            { 
                throw new boException(ex);
            } 
        }

        /// <summary>
        /// Actualizar los Roles.
        /// </summary>
        /// <param name="ds">dsRol</param>
        public virtual void Update(dsRol ds) 
        { 
            try 
            { 
                rol.Update(ds); 
            } 
            catch (Exception ex) 
            { 
                throw new boException(ex);
            } 
        } 
    }
}